using System.Collections.Generic;

namespace Kayac.Statistics
{
	public class ModifiedExponentialFunction : IFunction
	{
		private class LikelihoodFunc : IFunction2
		{
			private Histogram histogram;

			private int domainEstimateIteration;

			private double epsilon;

			private int minIntegrationIteration;

			private int maxIntegrationIteration;

			private ModifiedExponentialFunction lastFunc;

			public ModifiedExponentialFunction LastFunc => null;

			public LikelihoodFunc(Histogram histogram, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration)
			{
			}

			public double Evaluate(double a, double b)
			{
				return 0.0;
			}

			public void PartialDifferentiate(out double da, out double db, double a, double b, double epsilon)
			{
				da = default(double);
				db = default(double);
			}
		}

		private class ErrorFunc : IFunction2
		{
			private double average;

			private double variance;

			private int domainEstimateIteration;

			private double epsilon;

			private int minIntegrationIteration;

			private int maxIntegrationIteration;

			private ModifiedExponentialFunction lastFunc;

			public ModifiedExponentialFunction LastFunc => null;

			public ErrorFunc(double average, double variance, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration)
			{
			}

			public double Evaluate(double a, double b)
			{
				return 0.0;
			}

			public void PartialDifferentiate(out double dx0, out double dx1, double x0, double x1, double epsilon)
			{
				dx0 = default(double);
				dx1 = default(double);
			}
		}

		private double a;

		private double b;

		private double c;

		public double NonZeroHintX => 0.0;

		public bool DomainPositive => false;

		public ModifiedExponentialFunction(Histogram histogram, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration, int optimizeOuterIteration, int optimizeInnerIteration, double optimizeSpeed, double broadSearchStepA, double broadSearchStepB)
		{
		}

		public ModifiedExponentialFunction(double average, double variance, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration, int optimizeOuterIteration, int optimizeInnerIteration, double optimizeSpeed)
		{
		}

		public static ModifiedExponentialFunction PlotError(out double minError, out double bestA, out double bestB, List<double> errors, double average, double variance, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration, int resolution, double aStep, double bStep)
		{
			minError = default(double);
			bestA = default(double);
			bestB = default(double);
			return null;
		}

		public static void CalcParameters(out double a, out double b, out double c, double average, double variance, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration, int optimizeOuterIteration, int optimizeInnerIteration, double optimizeSpeed)
		{
			a = default(double);
			b = default(double);
			c = default(double);
		}

		public double Evaluate(double x)
		{
			return 0.0;
		}

		public double EvaluateLogVariablePart(double x)
		{
			return 0.0;
		}

		private double EvaluateLogPartialDerivativeA(double x)
		{
			return 0.0;
		}

		private double EvaluateLogPartialDerivativeB(double x)
		{
			return 0.0;
		}

		private ModifiedExponentialFunction(double a, double b, int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration)
		{
		}

		private void Normalize(int domainEstimateIteration, double epsilon, int minIntegrationIteration, int maxIntegrationIteration)
		{
		}
	}
}
